package com.yqs.dao.impl;

import com.yqs.abnormal.OutOfStackException;
import com.yqs.dao.PhoneBiz;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

/**
 * @author Ye QS
 * @version 0.1
 * @className PhoneBizImpl
 * @description
 * @date 2024/8/6 11:33
 * @since jdk11
 */
/**
 * 实现PhoneBiz接口的类，用于具体实现购买和销售手机的逻辑。
 * 使用@Component注解将此类标识为Spring的一个组件，并且指定了一个ID "phoneBiz"。
 */
@Component("phoneBiz")
public class PhoneBizImpl implements PhoneBiz {
    /**
     * 库存变量，用于记录当前库存中手机的数量。
     */
    int stock;

    /**
     * 实现PhoneBiz接口中定义的buyPhone方法，用于模拟购买手机的逻辑。
     * 当调用此方法时，传入的num数量的手机将被添加到库存中。
     */
    @Override
    public void buyPhone(int num) {
        stock += num; // 将购买的手机数量添加到库存中
        // 打印当前库存数量，这里应该是打印购买了num部手机，但打印的是库存总量
        System.out.println("购买了" + stock + "部手机");
    }

    /**
     * 实现PhoneBiz接口中定义的salPhone方法，用于模拟销售手机的逻辑。
     * 当调用此方法时，会检查库存是否充足，如果不足则抛出自定义异常。
     */
    @Override
    public void salPhone(int num) throws OutOfStackException {
        if (stock < num) {
            // 如果库存小于销售数量，则抛出自定义异常
            throw new OutOfStackException("库存不足，只有" + stock + ",客户需要" + num + "部");
        }
        // 从库存中减去销售的手机数量（这里缺少了实际扣除库存的代码）
        stock -= num; // 应添加到方法中以确保库存正确减少
        // 打印销售的手机数量
        System.out.println("销售了" + num + "部手机");
    }
}

